<?php
ini_set('error_reporting', 'E_ALL & ~E_DEPRECATED');
require_once 'simpletest/unit_tester.php';
require_once 'simpletest/reporter.php';
require_once dirname(__FILE__) . '/../Request/DateTime.php';

class RequestDateTimeTest extends UnitTestCase
{
	/** @var Lib_Request_DateTime */
	protected $_objRequest;

	public function setUp()
	{
		parent::setUp();
		$this->_objRequest = new Lib_Request_DateTime();
	}

	/**
	 * りくえすとをそのまま返す。
	 */
	public function test1100()
	{
		$_REQUEST['abc'] = 'good';
		$RET = $this->_objRequest->get('abc');
		$this->assertEqual($RET, 'good');
	}

	/**
	 * 年利クエストバリュー要求時、未設定の場合現在年を返す
	 */
	public function test1200()
	{
		$RET = $this->_objRequest->get(Lib_Request_DateTime::KEY_YEAR);
		$this->assertEqual($RET, date('Y'));
		$RET = $this->_objRequest->getYear();
		$this->assertEqual($RET, date('Y'));
	}

	/**
	 * 年リクエストバリュー要求時、値に数字以外が設定されていた場合
	 * 設定内容を破棄し、現在年をかえす
	 */
	public function test1300()
	{
		$_REQUEST[Lib_Request_DateTime::KEY_YEAR] = '20A0';
		$RET = $this->_objRequest->get(Lib_Request_DateTime::KEY_YEAR);
		$this->assertEqual($RET, date('Y'));
		$RET = $this->_objRequest->getYear();
		$this->assertEqual($RET, date('Y'));
	}

	/**
	 * 年利クエストバリュー要求時、値に1900未満が設定されていた場合
	 * 設定内容を破棄し、現在年を返す
	 */
	public function test1400()
	{
		$_REQUEST[Lib_Request_DateTime::KEY_YEAR] = '1899';
		$RET = $this->_objRequest->get(Lib_Request_DateTime::KEY_YEAR);
		$this->assertEqual($RET, date('Y'));
		$RET = $this->_objRequest->getYear();
		$this->assertEqual($RET, date('Y'));
	}

	/**
	 * 年リクエストバリュー要求時、設定値をそのまま返す
	 */
	public function test1500()
	{
		$_REQUEST[Lib_Request_DateTime::KEY_YEAR] = 2000;
		$RET = $this->_objRequest->get(Lib_Request_DateTime::KEY_YEAR);
		$this->assertEqual($RET, '2000');
		$RET = $this->_objRequest->getYear();
		$this->assertEqual($RET, '2000');
	}

	/**
	 * 月リクエストバリュー要求時、値が未設定の場合
	 * 現在月を返す
	 */
	public function test2100()
	{
		$RET = $this->_objRequest->get(Lib_Request_DateTime::KEY_MONTH);
		$this->assertEqual($RET, date('m'));
		$RET = $this->_objRequest->getMonth();
		$this->_objRequest->getMonth();
		$this->assertEqual($RET, date('m'));
	}

	/**
	 * 月リクエストバリュー要求時、設定値をそのまま返す
	 */
	public function test2200()
	{
		$_REQUEST[Lib_Request_DateTime::KEY_MONTH] = '12';
		$RET = $this->_objRequest->get(Lib_Request_DateTime::KEY_MONTH);
		$this->assertEqual($RET, '12');
		$RET = $this->_objRequest->getMonth();
		$this->assertEqual($RET, '12');
	}

	/**
	 * 日リクエストバリュー要求時、値が未設定の場合
	 * 現在日を返す
	 */
	public function test3100()
	{
		$RET = $this->_objRequest->get(Lib_Request_DateTime::KEY_DAY);
		$this->assertEqual($RET, date('d'));
		$RET = $this->_objRequest->getDay();
		$this->assertEqual($RET, date('d'));
	}

	/**
	 * 日リクエストバリュー要求時、設定値をそのまま返す
	 */
	public function test3200()
	{
		$_REQUEST[Lib_Request_DateTime::KEY_DAY] = '12';
		$RET = $this->_objRequest->get(Lib_Request_DateTime::KEY_DAY);
		$this->assertEqual($RET, '12');
		$RET = $this->_objRequest->getDay();
		$this->assertEqual($RET, '12');
	}

	/**
	 * 年月日リクエストバリュー要求時、値が未設定の場合
	 * 現在年月日をＹＹＹＹＭＭＤＤでかえす
	 */
	public function test4100()
	{
		$RET = $this->_objRequest->get(Lib_Request_DateTime::KEY_YMD);
		$this->assertEqual($RET, date('Ymd'));
		$RET = $this->_objRequest->getYearMonthDay();
		$this->assertEqual($RET, date('Ymd'));
	}

	/**
	 * 年月日リクエストバリュー要求時
	 * 値に2/30が設定されていた場合、設定値を破棄し
	 * 現在年月日をＹＹＹＹＭＭＤＤで返す
	 */
	public function test4200()
	{
		$_REQUEST[Lib_Request_DateTime::KEY_YMD] = 20110230;
		$RET = $this->_objRequest->get(Lib_Request_DateTime::KEY_YMD);
		$this->assertEqual($RET, date('Ymd'));
		$RET = $this->_objRequest->getYearMonthDay();
		$this->assertEqual($RET, date('Ymd'));
	}

	/**
	 * 年月日リクエストバリュー要求時、設定値をそのまま返す
	 */
	public function test4300()
	{
		$_REQUEST[Lib_Request_DateTime::KEY_YMD] = 20110228;
		$RET = $this->_objRequest->get(Lib_Request_DateTime::KEY_YMD);
		$this->assertEqual($RET, '20110228');
		$RET = $this->_objRequest->getYearMonthDay();
		$this->assertEqual($RET, '20110228');
	}

	/**
	 *  時刻（時）リクエストバリュー要求時、値が設定されていない場合、
	 *  現在時刻（時）をかえす
	 */
	public function test5100()
	{
		$RET = $this->_objRequest->get(Lib_Request_DateTime::KEY_HOUR);
		$this->assertEqual($RET, date('G'));
		$RET = $this->_objRequest->getHour();
		$this->assertEqual($RET, date('G'));
	}

	/**
	 * 時分（分）リクエストバリュー要求時、値が設定されていない場合
	 * 現在時刻（分）を返す
	 */
	public function test6100()
	{
		$RET = $this->_objRequest->get(Lib_Request_DateTime::KEY_MINUTE);
		$this->assertEqual($RET, sprintf('%d', date('i')));
		$RET = $this->_objRequest->getMinute();
		$this->assertEqual($RET, sprintf('%d', date('i')));
	}

	/**
	 * 時刻（分）リクエストバリュー要求時、設定されている値をそのまま返す
	 */
	public function test6200()
	{
		$_REQUEST[Lib_Request_DateTime::KEY_MINUTE] = '2';
		$RET = $this->_objRequest->get(Lib_Request_DateTime::KEY_MINUTE);
		$this->assertEqual($RET, '2');
		$RET = $this->_objRequest->getMinute();
		$this->assertEqual($RET, sprintf('%d', '2'));
	}

	/**
	 * 時刻（分）リクエストバリュー要求時、値に６０が設定されている場合、
	 * 設定値を破棄し、現在時刻（分）を返す
	 */
	public function test6300()
	{
		$_REQUEST[Lib_Request_DateTime::KEY_MINUTE] = '60';
		$RET = $this->_objRequest->get(Lib_Request_DateTime::KEY_MINUTE);
		$this->assertEqual($RET, sprintf('%d', date(i)));
		$RET = $this->_objRequest->getMinute();
		$this->assertEqual($RET, sprintf('%d', date(i)));
	}

	/**
	 * 時刻（分）リクエストバリュー要求時、値に数字以外が設定されている場合、
	 * 設定値を破棄し、現在時刻（分）をかえす
	 */
	public function test6400()
	{
		$_REQUEST[Lib_Request_DateTime::KEY_MINUTE] = 'AA';
		$RET = $this->_objRequest->get(Lib_Request_DateTime::KEY_MINUTE);
		$this->assertEqual($RET, sprintf('%d', date(i)));
		$RET = $this->_objRequest->getMinute();
		$this->assertEqual($RET, sprintf('%d', date(i)));
	}

	/**
	 * 年月日時分リクエストバリュー要求時、値が設定されていない場合
	 * 現在の年月日時分ＹＹＹＹＭＭＤＤＨＨＭＭで返す
	 */
	public function test7100()
	{
		$RET = $this->_objRequest->get(Lib_Request_DateTime::KEY_YMDHM);
		$this->assertEqual($RET, date('YmdHi'));
		$RET = $this->_objRequest->getYearMonthDayHourMinute();
		$this->assertEqual($RET, date('YmdHi'));
	}

	/**
	 * 年月日時分リクエストバリュー要求時、設定されている値をそのまま返す
	 */
	public function test7200()
	{
		$_REQUEST[Lib_Request_DateTime::KEY_YMDHM] = '201112301039';
		$RET = $this->_objRequest->get(Lib_Request_DateTime::KEY_YMDHM);
		$this->assertEqual($RET, '201112301039');
		$RET = $this->_objRequest->getYearMonthDayHourMinute();
		$this->assertEqual($RET, '201112301039');
	}

	/**
	 * 年月日時分リクエストバリュー要求時
	 * 値に201102301000が設定されている場合、設定値を破棄し
	 * 現在の年月日時分をYYYYMMDDHHMMで返す
	 */
	public function test7300()
	{
		$_REQUEST[Lib_Request_DateTime::KEY_YMDHM] = '201102301039';
		$RET = $this->_objRequest->get(Lib_Request_DateTime::KEY_YMDHM);
		$this->assertEqual($RET, date('YmdHi'));
		$RET = $this->_objRequest->getYearMonthDayHourMinute();
		$this->assertEqual($RET, date('YmdHi'));
	}

	/**
	 * 年月日時分リクエストバリュー要求時
	 * 値に201112202400が設定されている場合、設定値を破棄し
	 * 現在の年月日時分をYYYYMMDDHHMMでかえす
	 */
	public function test7400()
	{
		$_REQUEST[Lib_Request_DateTime::KEY_YMDHM] = '201112202400';
		$RET = $this->_objRequest->get(Lib_Request_DateTime::KEY_YMDHM);
		$this->assertEqual($RET, date('YmdHi'));
		$RET = $this->_objRequest->getYearMonthDayHourMinute();
		$this->assertEqual($RET, date('YmdHi'));
	}

	/**
	 * 年月日時分リクエストバリュー要求時
	 * 値に201112201260が競ってされている場合、設定値を破棄し
	 * 現在の年月日時分をYYYYMMDDHHMMでかえす
	 */
	public function test7500()
	{
		$_REQUEST[Lib_Request_DateTime::KEY_YMDHM] = '201112201260';
		$RET = $this->_objRequest->get(Lib_Request_DateTime::KEY_YMDHM);
		$this->assertEqual($RET, date('YmdHi'));
		$RET = $this->_objRequest->getYearMonthDayHourMinute();
		$this->assertEqual($RET, date('YmdHi'));
	}

	/**
	 * 年・月それぞれのパラメータからYYYYMMを返す
	 */
	public function test8100()
	{
		$_REQUEST[Lib_Request_DateTime::KEY_YEAR] = 2012;
		$_REQUEST[Lib_Request_DateTime::KEY_MONTH] = 8;
		$RET = $this->_objRequest->getYYYYMMfromSeparateRequest();
		$this->assertEqual($RET, '201208');
	}
}